import { ref, reactive } from 'vue';
import { ElMessage } from 'element-plus';
import orderApi from '../apis/order';

/**
 * 订单中心的Hook
 */
export const useOrderCenter = () => {
  // 订单列表数据
  const orderList = ref([]);
  // 加载状态
  const loading = ref(false);
  // 当前页码
  const currentPage = ref(1);
  // 每页条数
  const pageSize = ref(10);
  // 总数据量
  const total = ref(0);
  // 搜索参数
  const searchParams = reactive({
    title: '',
    username: ''
  });

  /**
   * 获取订单列表
   */
  const fetchOrderList = async () => {
    try {
      loading.value = true;
      
      // 构建查询参数
      const params = {
        pageNum: currentPage.value,
        pageSize: pageSize.value
      };

      // 只在有值时添加搜索参数
      if (searchParams.title) {
        params.title = searchParams.title;
      }
      if (searchParams.username) {
        params.username = searchParams.username;
      }

      // 调用API获取订单列表
      const response = await orderApi.getOrderList(params);
      
      if (response.code === 200) {
        orderList.value = response.data.records || [];
        total.value = response.data.total || 0;
      } else {
        ElMessage.error(response.message || '获取订单列表失败');
        
        // 使用模拟数据作为备用
        useMockData();
      }
    } catch (error) {
      console.error('获取订单列表失败:', error);
      ElMessage.error('获取订单列表失败，请稍后重试');
      
      // 使用模拟数据作为备用
      useMockData();
    } finally {
      loading.value = false;
    }
  };

  /**
   * 使用模拟数据
   */
  const useMockData = () => {
    // 基于SQL结构创建模拟数据，使用小驼峰命名法
    orderList.value = [
      {
        id: 1,
        demandId: 1,
        demandTitle: '网站前端开发需求',
        demandDescription: '需要开发一个响应式网站前端，包含首页、产品展示、关于我们、联系我们等页面。要求使用Vue.js框架，UI设计精美，交互流畅。',
        enterpriseId: 1,
        userId: 2,
        username: '张三',
        bidAmount: 4800.00,
        status: 1,
        confirmTime: '2025-11-10 15:30:00',
        finishTime: '2025-11-20 18:00:00',
        createTime: '2025-11-10 10:00:00',
        updateTime: '2025-11-20 18:00:00'
      },
      {
        id: 2,
        demandId: 4,
        demandTitle: '数据分析报告',
        demandDescription: '需要对公司过去一年的运营数据进行分析，生成详细的数据分析报告，包括用户增长趋势、销售数据分析、市场趋势预测等内容。',
        enterpriseId: 2,
        userId: 3,
        username: '李四',
        bidAmount: 1800.00,
        status: 1,
        confirmTime: '2025-11-12 14:20:00',
        finishTime: '2025-11-22 10:30:00',
        createTime: '2025-11-12 10:00:00',
        updateTime: '2025-11-22 10:30:00'
      },
      {
        id: 3,
        demandId: 5,
        demandTitle: '移动应用开发',
        demandDescription: '开发一款跨平台移动应用，支持iOS和Android，包含用户注册登录、个人中心、消息通知等功能模块。',
        enterpriseId: 3,
        userId: 4,
        username: '王五',
        bidAmount: 8000.00,
        status: 0,
        confirmTime: '2025-11-15 09:15:00',
        finishTime: null,
        createTime: '2025-11-15 09:00:00',
        updateTime: '2025-11-15 09:15:00'
      },
      {
        id: 4,
        demandId: 6,
        demandTitle: 'UI设计服务',
        demandDescription: '为一款社交类移动应用设计UI界面，需要包含登录注册、首页信息流、个人中心、消息通知等模块。要求设计风格现代简约，用户体验良好。',
        enterpriseId: 1,
        userId: 5,
        username: '赵六',
        bidAmount: 2500.00,
        status: 0,
        confirmTime: '2025-11-16 16:45:00',
        finishTime: null,
        createTime: '2025-11-16 16:00:00',
        updateTime: '2025-11-16 16:45:00'
      }
    ];
    total.value = orderList.value.length;
  };

  /**
   * 完成订单
   * @param {number} orderId 订单ID
   */
  const finishOrder = async (orderId) => {
    try {
      loading.value = true;
      
      // 调用完成订单API
      const response = await orderApi.finishOrder(orderId);
      
      if (response.code === 200) {
        ElMessage.success('订单已完成');
        // 重新获取订单列表
        fetchOrderList();
      } else {
        ElMessage.error(response.message || '完成订单失败');
      }
    } catch (error) {
      console.error('完成订单失败:', error);
      ElMessage.error('完成订单失败，请稍后重试');
      
      // 模拟完成订单操作
      const order = orderList.value.find(item => item.id === orderId);
      if (order) {
        order.status = 1;
        order.finishTime = new Date().toLocaleString('zh-CN');
        order.updateTime = new Date().toLocaleString('zh-CN');
        ElMessage.success('模拟：订单已完成');
      }
    } finally {
      loading.value = false;
    }
  };

  /**
   * 搜索订单
   */
  const handleSearch = () => {
    currentPage.value = 1;
    fetchOrderList();
  };

  /**
   * 重置搜索条件
   */
  const handleReset = () => {
    searchParams.title = '';
    searchParams.username = '';
    currentPage.value = 1;
    fetchOrderList();
  };

  /**
   * 页码改变时的处理函数
   * @param {number} val 新的页码
   */
  const handleCurrentChange = (val) => {
    currentPage.value = val;
    fetchOrderList();
  };

  /**
   * 每页条数改变时的处理函数
   * @param {number} val 新的每页条数
   */
  const handleSizeChange = (val) => {
    pageSize.value = val;
    currentPage.value = 1;
    fetchOrderList();
  };

  /**
   * 获取订单状态文本
   * @param {number} status 订单状态
   * @returns {string} 状态文本
   */
  const getStatusText = (status) => {
    const statusMap = {
      0: '进行中',
      1: '已完成',
      2: '已拒绝',
      3: '已取消'
    };
    return statusMap[status] || '未知状态';
  };

  /**
   * 获取订单状态对应的标签类型
   * @param {number} status 订单状态
   * @returns {string} 标签类型
   */
  const getStatusTagType = (status) => {
    const typeMap = {
      0: 'warning',
      1: 'success',
      2: 'danger',
      3: 'info'
    };
    return typeMap[status] || 'info';
  };

  // 返回需要的状态和方法
  return {
    // 状态
    orderList,
    loading,
    currentPage,
    pageSize,
    total,
    searchParams,
    
    // 方法
    fetchOrderList,
    finishOrder,
    handleSearch,
    handleReset,
    handleCurrentChange,
    handleSizeChange,
    getStatusText,
    getStatusTagType
  };
};